// RAP [rh] As of now, content types don't make sense in RAP
///*******************************************************************************
// * Copyright (c) 2005, 2007 IBM Corporation and others.
// * All rights reserved. This program and the accompanying materials
// * are made available under the terms of the Eclipse Public License v1.0
// * which accompanies this distribution, and is available at
// * http://www.eclipse.org/legal/epl-v10.html
// *
// * Contributors:
// * IBM Corporation - initial API and implementation
// *******************************************************************************/
//package org.eclipse.ui.internal.dialogs;
//
//import java.util.ArrayList;
//import java.util.Iterator;
//import java.util.List;
//
//import org.eclipse.core.runtime.CoreException;
//import org.eclipse.core.runtime.IStatus;
//import org.eclipse.core.runtime.MultiStatus;
//import org.eclipse.core.runtime.Platform;
//import org.eclipse.core.runtime.content.IContentType;
//import org.eclipse.core.runtime.content.IContentTypeManager;
//import org.eclipse.jface.preference.PreferencePage;
//import org.eclipse.jface.viewers.ISelectionChangedListener;
//import org.eclipse.jface.viewers.IStructuredContentProvider;
//import org.eclipse.jface.viewers.IStructuredSelection;
//import org.eclipse.jface.viewers.ITreeContentProvider;
//import org.eclipse.jface.viewers.LabelProvider;
//import org.eclipse.jface.viewers.ListViewer;
//import org.eclipse.jface.viewers.SelectionChangedEvent;
//import org.eclipse.jface.viewers.TreeViewer;
//import org.eclipse.jface.viewers.Viewer;
//import org.eclipse.jface.viewers.ViewerComparator;
//import org.eclipse.jface.window.Window;
//import org.eclipse.osgi.util.NLS;
//import org.eclipse.osgi.util.TextProcessor;
//import org.eclipse.swt.SWT;
//import org.eclipse.swt.events.KeyAdapter;
//import org.eclipse.swt.events.KeyEvent;
//import org.eclipse.swt.events.SelectionAdapter;
//import org.eclipse.swt.events.SelectionEvent;
//import org.eclipse.swt.layout.GridData;
//import org.eclipse.swt.layout.GridLayout;
//import org.eclipse.swt.widgets.Button;
//import org.eclipse.swt.widgets.Composite;
//import org.eclipse.swt.widgets.Control;
//import org.eclipse.swt.widgets.Label;
//import org.eclipse.swt.widgets.Shell;
//import org.eclipse.swt.widgets.Text;
//import org.eclipse.ui.IWorkbench;
//import org.eclipse.ui.IWorkbenchPreferencePage;
//import org.eclipse.ui.PlatformUI;
//import org.eclipse.ui.dialogs.PreferenceLinkArea;
//import org.eclipse.ui.internal.IWorkbenchHelpContextIds;
//import org.eclipse.ui.internal.WorkbenchMessages;
//import org.eclipse.ui.internal.WorkbenchPlugin;
//import org.eclipse.ui.internal.misc.StatusUtil;
//import org.eclipse.ui.internal.util.Util;
//import org.eclipse.ui.preferences.IWorkbenchPreferenceContainer;
//import org.eclipse.ui.statushandlers.StatusManager;
//
///**
// * Preference page that allows manipulation of core content types. Unlike most
// * preference pages, it does not work on the preference store itself but rather
// * the content type manager. As such, there are no apply/default buttons and all
// * changes made take effect immediately.
// *
// * @since 3.1
// */
//public class ContentTypesPreferencePage extends PreferencePage implements
// IWorkbenchPreferencePage {
//
// private ListViewer fileAssociationViewer;
//
// private Button removeButton;
//
// private TreeViewer contentTypesViewer;
//
// private Button addButton;
//
// private Button editButton;
//
// private Text charsetField;
//
// private Button setButton;
//
// private IWorkbench workbench;
//
// private class Spec {
// String name;
//
// String ext;
//
// boolean isPredefined;
//
// int sortValue;
//
// /*
// * (non-Javadoc)
// *
// * @see java.lang.Object#toString()
// */
// public String toString() {
// String toString;
// if (name != null) {
// toString = name;
// } else {
// toString = "*." + ext; //$NON-NLS-1$
// }
//
// if (isPredefined) {
// toString = NLS.bind(
// WorkbenchMessages.get().ContentTypes_lockedFormat, toString);
// }
//
// return toString;
// }
// }
//
// private class FileSpecComparator extends ViewerComparator {
// public int category(Object element) {
// // only Spec objects in here - unchecked cast
// return ((Spec) element).sortValue;
// }
// }
//
// private class FileSpecLabelProvider extends LabelProvider {
// /*
// * (non-Javadoc)
// *
// * @see org.eclipse.jface.viewers.LabelProvider#getText(java.lang.Object)
// */
// public String getText(Object element) {
// String label = super.getText(element);
// return TextProcessor.process(label, "*."); //$NON-NLS-1$
// }
// }
//
// private class FileSpecContentProvider implements IStructuredContentProvider {
//
// /*
// * (non-Javadoc)
// *
// * @see org.eclipse.jface.viewers.IContentProvider#dispose()
// */
// public void dispose() {
// }
//
// /*
// * (non-Javadoc)
// *
// * @see org.eclipse.jface.viewers.IContentProvider#inputChanged(org.eclipse.jface.viewers.Viewer,
// * java.lang.Object, java.lang.Object)
// */
// public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
// }
//
// /*
// * (non-Javadoc)
// *
// * @see org.eclipse.jface.viewers.IStructuredContentProvider#getElements(java.lang.Object)
// */
// public Object[] getElements(Object inputElement) {
// IContentType contentType = (IContentType) inputElement;
// String[] userextfileSpecs = contentType
// .getFileSpecs(IContentType.FILE_EXTENSION_SPEC
// | IContentType.IGNORE_PRE_DEFINED);
// String[] usernamefileSpecs = contentType
// .getFileSpecs(IContentType.FILE_NAME_SPEC
// | IContentType.IGNORE_PRE_DEFINED);
// String[] preextfileSpecs = contentType
// .getFileSpecs(IContentType.FILE_EXTENSION_SPEC
// | IContentType.IGNORE_USER_DEFINED);
// String[] prenamefileSpecs = contentType
// .getFileSpecs(IContentType.FILE_NAME_SPEC
// | IContentType.IGNORE_USER_DEFINED);
//
// return createSpecs(userextfileSpecs, usernamefileSpecs,
// preextfileSpecs, prenamefileSpecs);
// }
//
// private Object[] createSpecs(String[] userextfileSpecs,
// String[] usernamefileSpecs, String[] preextfileSpecs,
// String[] prenamefileSpecs) {
// List returnValues = new ArrayList();
// for (int i = 0; i < usernamefileSpecs.length; i++) {
// Spec spec = new Spec();
// spec.name = usernamefileSpecs[i];
// spec.isPredefined = false;
// spec.sortValue = 0;
// returnValues.add(spec);
// }
//
// for (int i = 0; i < prenamefileSpecs.length; i++) {
// Spec spec = new Spec();
// spec.name = prenamefileSpecs[i];
// spec.isPredefined = true;
// spec.sortValue = 1;
// returnValues.add(spec);
// }
//
// for (int i = 0; i < userextfileSpecs.length; i++) {
// Spec spec = new Spec();
// spec.ext = userextfileSpecs[i];
// spec.isPredefined = false;
// spec.sortValue = 2;
// returnValues.add(spec);
// }
//
// for (int i = 0; i < preextfileSpecs.length; i++) {
// Spec spec = new Spec();
// spec.ext = preextfileSpecs[i];
// spec.isPredefined = true;
// spec.sortValue = 3;
// returnValues.add(spec);
// }
//
// return returnValues.toArray();
// }
// }
//
// private class ContentTypesLabelProvider extends LabelProvider {
// /*
// * (non-Javadoc)
// *
// * @see org.eclipse.jface.viewers.LabelProvider#getText(java.lang.Object)
// */
// public String getText(Object element) {
// IContentType contentType = (IContentType) element;
// return contentType.getName();
// }
// }
//
// private class ContentTypesContentProvider implements ITreeContentProvider {
//
// private IContentTypeManager manager;
//
// /*
// * (non-Javadoc)
// *
// * @see org.eclipse.jface.viewers.ITreeContentProvider#getChildren(java.lang.Object)
// */
// public Object[] getChildren(Object parentElement) {
// List elements = new ArrayList();
// IContentType baseType = (IContentType) parentElement;
// IContentType[] contentTypes = manager.getAllContentTypes();
// for (int i = 0; i < contentTypes.length; i++) {
// IContentType type = contentTypes[i];
// if (Util.equals(type.getBaseType(), baseType)) {
// elements.add(type);
// }
// }
// return elements.toArray();
// }
//
// /*
// * (non-Javadoc)
// *
// * @see org.eclipse.jface.viewers.ITreeContentProvider#getParent(java.lang.Object)
// */
// public Object getParent(Object element) {
// IContentType contentType = (IContentType) element;
// return contentType.getBaseType();
// }
//
// /*
// * (non-Javadoc)
// *
// * @see org.eclipse.jface.viewers.ITreeContentProvider#hasChildren(java.lang.Object)
// */
// public boolean hasChildren(Object element) {
// return getChildren(element).length > 0;
// }
//
// /*
// * (non-Javadoc)
// *
// * @see org.eclipse.jface.viewers.IStructuredContentProvider#getElements(java.lang.Object)
// */
// public Object[] getElements(Object inputElement) {
// return getChildren(null);
// }
//
// /*
// * (non-Javadoc)
// *
// * @see org.eclipse.jface.viewers.IContentProvider#dispose()
// */
// public void dispose() {
//
// }
//
// /*
// * (non-Javadoc)
// *
// * @see org.eclipse.jface.viewers.IContentProvider#inputChanged(org.eclipse.jface.viewers.Viewer,
// * java.lang.Object, java.lang.Object)
// */
// public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
// manager = (IContentTypeManager) newInput;
// }
// }
//
// /*
// * (non-Javadoc)
// *
// * @see org.eclipse.jface.preference.PreferencePage#createContents(org.eclipse.swt.widgets.Composite)
// */
// protected Control createContents(Composite parent) {
// Composite composite = new Composite(parent, SWT.NONE);
// GridLayout layout = new GridLayout(2, false);
// layout.marginHeight = layout.marginWidth = 0;
// composite.setLayout(layout);
//
// PreferenceLinkArea contentTypeArea = new PreferenceLinkArea(
// composite,
// SWT.NONE,
// "org.eclipse.ui.preferencePages.FileEditors", WorkbenchMessages.get().ContentTypes_FileEditorsRelatedLink,//$NON-NLS-1$
// (IWorkbenchPreferenceContainer) getContainer(), null);
//
// GridData data = new GridData(GridData.FILL_HORIZONTAL
// | GridData.GRAB_HORIZONTAL);
// contentTypeArea.getControl().setLayoutData(data);
//
// createContentTypesTree(composite);
// createFileAssociations(composite);
// createCharset(composite);
//
// workbench.getHelpSystem().setHelp(parent,
// IWorkbenchHelpContextIds.CONTENT_TYPES_PREFERENCE_PAGE);
//
// applyDialogFont(composite);
// return composite;
// }
//
// private void createCharset(final Composite parent) {
// Composite composite = new Composite(parent, SWT.NONE);
// GridLayout layout = new GridLayout(3, false);
// layout.marginHeight = layout.marginWidth = 0;
// GridData compositeData = new GridData(GridData.FILL_HORIZONTAL);
// compositeData.horizontalSpan = 2;
// composite.setLayoutData(compositeData);
// composite.setLayout(layout);
//
// Label label = new Label(composite, SWT.NONE);
// label.setFont(parent.getFont());
// label.setText(WorkbenchMessages.get().ContentTypes_characterSetLabel);
// charsetField = new Text(composite, SWT.SINGLE | SWT.BORDER);
// charsetField.setFont(parent.getFont());
// charsetField.setEnabled(false);
// GridData data = new GridData(GridData.FILL_HORIZONTAL);
// charsetField.setLayoutData(data);
// setButton = new Button(composite, SWT.PUSH);
// setButton.setFont(parent.getFont());
// setButton
// .setText(WorkbenchMessages.get().ContentTypes_characterSetUpdateLabel);
// setButton.setEnabled(false);
// setButtonLayoutData(setButton);
// setButton.addSelectionListener(new SelectionAdapter() {
//
// /*
// * (non-Javadoc)
// *
// * @see org.eclipse.swt.events.SelectionAdapter#widgetSelected(org.eclipse.swt.events.SelectionEvent)
// */
// public void widgetSelected(SelectionEvent e) {
// try {
// String text = charsetField.getText().trim();
// if (text.length() == 0) {
// text = null;
// }
// getSelectedContentType().setDefaultCharset(text);
// setButton.setEnabled(false);
// } catch (CoreException e1) {
// StatusUtil.handleStatus(e1.getStatus(), StatusManager.SHOW,
// parent.getShell());
// }
// }
// });
//
// charsetField.addKeyListener(new KeyAdapter() {
// /*
// * (non-Javadoc)
// *
// * @see org.eclipse.swt.events.KeyAdapter#keyReleased(org.eclipse.swt.events.KeyEvent)
// */
// public void keyReleased(KeyEvent e) {
// IContentType contentType = getSelectedContentType();
// String charset = contentType.getDefaultCharset();
// if (charset == null) {
// charset = ""; //$NON-NLS-1$
// }
// setButton.setEnabled(!charset.equals(charsetField.getText()));
// }
// });
//
// }
//
// /**
// * @param composite
// */
// private void createFileAssociations(final Composite composite) {
// {
// Label label = new Label(composite, SWT.NONE);
// label.setText(WorkbenchMessages.get().ContentTypes_fileAssociationsLabel);
// GridData data = new GridData();
// data.horizontalSpan = 2;
// label.setLayoutData(data);
// }
// {
// fileAssociationViewer = new ListViewer(composite);
// fileAssociationViewer.setComparator(new FileSpecComparator());
// fileAssociationViewer.getControl().setFont(composite.getFont());
// fileAssociationViewer
// .setContentProvider(new FileSpecContentProvider());
// fileAssociationViewer.setLabelProvider(new FileSpecLabelProvider());
// GridData data = new GridData(GridData.FILL_BOTH);
// data.horizontalSpan = 1;
// fileAssociationViewer.getControl().setLayoutData(data);
// fileAssociationViewer
// .addSelectionChangedListener(new ISelectionChangedListener() {
//
// public void selectionChanged(SelectionChangedEvent event) {
// IStructuredSelection selection = (IStructuredSelection) event
// .getSelection();
// if (selection.isEmpty()) {
// editButton.setEnabled(false);
// removeButton.setEnabled(false);
// return;
// }
// boolean enabled = true;
// List elements = selection.toList();
// for (Iterator i = elements.iterator(); i.hasNext();) {
// Spec spec = (Spec) i.next();
// if (spec.isPredefined) {
// enabled = false;
// }
// }
// editButton.setEnabled(enabled && selection.size() == 1);
// removeButton.setEnabled(enabled);
// }
// });
// }
// {
// Composite buttonArea = new Composite(composite, SWT.NONE);
// GridLayout layout = new GridLayout(1, false);
// layout.marginHeight = layout.marginWidth = 0;
// buttonArea.setLayout(layout);
// GridData data = new GridData(GridData.VERTICAL_ALIGN_BEGINNING);
// buttonArea.setLayoutData(data);
//
// addButton = new Button(buttonArea, SWT.PUSH);
// addButton.setFont(composite.getFont());
// addButton
// .setText(WorkbenchMessages.get().ContentTypes_fileAssociationsAddLabel);
// addButton.setEnabled(false);
// setButtonLayoutData(addButton);
// addButton.addSelectionListener(new SelectionAdapter() {
// /*
// * (non-Javadoc)
// *
// * @see org.eclipse.swt.events.SelectionAdapter#widgetSelected(org.eclipse.swt.events.SelectionEvent)
// */
// public void widgetSelected(SelectionEvent e) {
// Shell shell = composite.getShell();
// IContentType selectedContentType = getSelectedContentType();
// FileExtensionDialog dialog = new FileExtensionDialog(
// shell,
// WorkbenchMessages.get().ContentTypes_addDialog_title,
// IWorkbenchHelpContextIds.FILE_EXTENSION_DIALOG,
// WorkbenchMessages.get().ContentTypes_addDialog_messageHeader,
// WorkbenchMessages.get().ContentTypes_addDialog_message,
// WorkbenchMessages.get().ContentTypes_addDialog_label);
// if (dialog.open() == Window.OK) {
// String name = dialog.getName();
// String extension = dialog.getExtension();
// try {
// if (name.equals("*")) { //$NON-NLS-1$
// selectedContentType.addFileSpec(extension,
// IContentType.FILE_EXTENSION_SPEC);
// } else {
// selectedContentType
// .addFileSpec(
// name
// + (extension.length() > 0 ? ('.' + extension)
// : ""), //$NON-NLS-1$
// IContentType.FILE_NAME_SPEC);
// }
// } catch (CoreException ex) {
// StatusUtil.handleStatus(ex.getStatus(),
// StatusManager.SHOW, shell);
// WorkbenchPlugin.log(ex);
// } finally {
// fileAssociationViewer.refresh(false);
// }
// }
// }
// });
//
// editButton = new Button(buttonArea, SWT.PUSH);
// editButton.setFont(composite.getFont());
// editButton
// .setText(WorkbenchMessages.get().ContentTypes_fileAssociationsEditLabel);
// editButton.setEnabled(false);
// setButtonLayoutData(editButton);
// editButton.addSelectionListener(new SelectionAdapter() {
// public void widgetSelected(SelectionEvent e) {
// Shell shell = composite.getShell();
// IContentType selectedContentType = getSelectedContentType();
// Spec spec = getSelectedSpecs()[0];
// FileExtensionDialog dialog = new FileExtensionDialog(
// shell,
// WorkbenchMessages.get().ContentTypes_editDialog_title,
// IWorkbenchHelpContextIds.FILE_EXTENSION_DIALOG,
// WorkbenchMessages.get().ContentTypes_editDialog_messageHeader,
// WorkbenchMessages.get().ContentTypes_editDialog_message,
// WorkbenchMessages.get().ContentTypes_editDialog_label);
// if (spec.name == null) {
// dialog.setInitialValue("*." + spec.ext); //$NON-NLS-1$
// } else {
// dialog.setInitialValue(spec.name);
// }
// if (dialog.open() == Window.OK) {
// String name = dialog.getName();
// String extension = dialog.getExtension();
// try {
// // remove the original spec
// if (spec.name != null) {
// selectedContentType.removeFileSpec(spec.name,
// IContentType.FILE_NAME_SPEC);
// } else if (spec.ext != null) {
// selectedContentType.removeFileSpec(spec.ext,
// IContentType.FILE_EXTENSION_SPEC);
// }
//
// // add the new one
// if (name.equals("*")) { //$NON-NLS-1$
// selectedContentType.addFileSpec(extension,
// IContentType.FILE_EXTENSION_SPEC);
// } else {
// selectedContentType
// .addFileSpec(
// name
// + (extension.length() > 0 ? ('.' + extension)
// : ""), //$NON-NLS-1$
// IContentType.FILE_NAME_SPEC);
// }
// } catch (CoreException ex) {
// StatusUtil.handleStatus(ex.getStatus(),
// StatusManager.SHOW, shell);
// WorkbenchPlugin.log(ex);
// } finally {
// fileAssociationViewer.refresh(false);
// }
// }
// }
// });
//
// removeButton = new Button(buttonArea, SWT.PUSH);
// removeButton.setEnabled(false);
// removeButton
// .setText(WorkbenchMessages.get().ContentTypes_fileAssociationsRemoveLabel);
// setButtonLayoutData(removeButton);
// removeButton.addSelectionListener(new SelectionAdapter() {
// /*
// * (non-Javadoc)
// *
// * @see org.eclipse.swt.events.SelectionAdapter#widgetSelected(org.eclipse.swt.events.SelectionEvent)
// */
// public void widgetSelected(SelectionEvent event) {
// IContentType contentType = getSelectedContentType();
// Spec[] specs = getSelectedSpecs();
// MultiStatus result = new MultiStatus(PlatformUI.PLUGIN_ID,
// 0, new IStatus[0],
// WorkbenchMessages.get().ContentTypes_errorDialogMessage,
// null);
// for (int i = 0; i < specs.length; i++) {
// Spec spec = specs[i];
// try {
// if (spec.name != null) {
// contentType.removeFileSpec(spec.name,
// IContentType.FILE_NAME_SPEC);
// } else if (spec.ext != null) {
// contentType.removeFileSpec(spec.ext,
// IContentType.FILE_EXTENSION_SPEC);
// }
// } catch (CoreException e) {
// result.add(e.getStatus());
// }
// }
// if (!result.isOK()) {
// StatusUtil.handleStatus(result, StatusManager.SHOW,
// composite.getShell());
// }
// fileAssociationViewer.refresh(false);
// }
// });
// }
// }
//
// protected Spec[] getSelectedSpecs() {
// List list = ((IStructuredSelection) fileAssociationViewer
// .getSelection()).toList();
// return (Spec[]) list.toArray(new Spec[list.size()]);
// }
//
// protected IContentType getSelectedContentType() {
// return (IContentType) ((IStructuredSelection) contentTypesViewer
// .getSelection()).getFirstElement();
// }
//
// /**
// * @param composite
// */
// private void createContentTypesTree(Composite composite) {
// {
// Label label = new Label(composite, SWT.NONE);
// label.setFont(composite.getFont());
// label.setText(WorkbenchMessages.get().ContentTypes_contentTypesLabel);
// GridData data = new GridData();
// data.horizontalSpan = 2;
// label.setLayoutData(data);
// }
// {
// contentTypesViewer = new TreeViewer(composite, SWT.SINGLE
// | SWT.H_SCROLL | SWT.V_SCROLL | SWT.BORDER);
// contentTypesViewer.getControl().setFont(composite.getFont());
// contentTypesViewer
// .setContentProvider(new ContentTypesContentProvider());
// contentTypesViewer
// .setLabelProvider(new ContentTypesLabelProvider());
// contentTypesViewer.setComparator(new ViewerComparator());
// contentTypesViewer.setInput(Platform.getContentTypeManager());
// GridData data = new GridData(GridData.FILL_BOTH);
// data.horizontalSpan = 2;
// contentTypesViewer.getControl().setLayoutData(data);
//
// contentTypesViewer
// .addSelectionChangedListener(new ISelectionChangedListener() {
//
// /*
// * (non-Javadoc)
// *
// * @see org.eclipse.jface.viewers.ISelectionChangedListener#selectionChanged(org.eclipse.jface.viewers.SelectionChangedEvent)
// */
// public void selectionChanged(SelectionChangedEvent event) {
// IContentType contentType = (IContentType) ((IStructuredSelection) event
// .getSelection()).getFirstElement();
// fileAssociationViewer.setInput(contentType);
//
// if (contentType != null) {
// String charset = contentType
// .getDefaultCharset();
// if (charset == null) {
// charset = ""; //$NON-NLS-1$
// }
// charsetField.setText(charset);
// } else {
// charsetField.setText(""); //$NON-NLS-1$
// }
//
// charsetField.setEnabled(contentType != null);
// addButton.setEnabled(contentType != null);
// setButton.setEnabled(false);
// }
// });
// }
// }
//
// /*
// * (non-Javadoc)
// *
// * @see org.eclipse.ui.IWorkbenchPreferencePage#init(org.eclipse.ui.IWorkbench)
// */
// public void init(IWorkbench workbench) {
// this.workbench = workbench;
// noDefaultAndApplyButton();
// }
//}